package com.zbj.homemade.spring.beans;

import java.util.List;

/**
 * @program: principle
 * @description: bean定义接口，
 * 在spring中，所有文件会被扫描，封装成resource类型,元数据类型，最后会装配成beandefinition寄存在spring的内存容器之中,
 * beanDefinition是实例化对象的基础，装着类信息，是否懒加载，是否自动装配，等等配置信息。
 * @author: Yinn
 * @create: 2019-02-28 16:22
 **/
public interface BeanDefinition {

    /**
     * 单例静态常量flag
     */
    String SCOPE_SINGLETON = "singleton";

    /**
     * 多例静态常量flag
     */
    String SCOPE_PROTOTYPE = "prototype";


    /**
     * 设置是否懒加载
     */
    void setLazyInit(boolean lazyInit);

    /**
     * 设置作用域 四种： 单例 多例 request session。
     */
    void setScope(String scope);

    /**
     * 获取是否懒加载
     */
    boolean getLazyInit();

    /**
     * 获取作用于
     */
    String getScope();

    /**
     * 获取当前定义中bean的class加载器
     * 此方法在spring中不在此接口中，只是为了节省实现层级
     */
    Class<?> getBeanClass();

    /**
     * 是否需要有赋值动作
     */
    boolean hasPropertyValue();

    /**
     * 返回所有要赋的值
     */
    List<PropertyValue> propertyValues();
}
